/**
 * <copyright>
 * </copyright>
 *
 */
package org.xtext.example.mydsl.myDsl.util;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;

import org.eclipse.emf.ecore.util.Switch;

import org.xtext.example.mydsl.myDsl.*;

/**
 * <!-- begin-user-doc -->
 * The <b>Switch</b> for the model's inheritance hierarchy.
 * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
 * to invoke the <code>caseXXX</code> method for each class of the model,
 * starting with the actual class of the object
 * and proceeding up the inheritance hierarchy
 * until a non-null result is returned,
 * which is the result of the switch.
 * <!-- end-user-doc -->
 * @see org.xtext.example.mydsl.myDsl.MyDslPackage
 * @generated
 */
public class MyDslSwitch<T4> extends Switch<T4>
{
  /**
   * The cached model package
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  protected static MyDslPackage modelPackage;

  /**
   * Creates an instance of the switch.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public MyDslSwitch()
  {
    if (modelPackage == null)
    {
      modelPackage = MyDslPackage.eINSTANCE;
    }
  }

  /**
   * Checks whether this is a switch for the given package.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @parameter ePackage the package in question.
   * @return whether this is a switch for the given package.
   * @generated
   */
  @Override
  protected boolean isSwitchFor(EPackage ePackage)
  {
    return ePackage == modelPackage;
  }

  /**
   * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the first non-null result returned by a <code>caseXXX</code> call.
   * @generated
   */
  @Override
  protected T4 doSwitch(int classifierID, EObject theEObject)
  {
    switch (classifierID)
    {
      case MyDslPackage.FILE_SF:
      {
        FileSF fileSF = (FileSF)theEObject;
        T4 result = caseFileSF(fileSF);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.PROG:
      {
        Prog prog = (Prog)theEObject;
        T4 result = caseProg(prog);
        if (result == null) result = caseFileSF(prog);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.PROG1:
      {
        Prog1 prog1 = (Prog1)theEObject;
        T4 result = caseProg1(prog1);
        if (result == null) result = caseFileSF(prog1);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.IMPORT:
      {
        Import import_ = (Import)theEObject;
        T4 result = caseImport(import_);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.DICH:
      {
        Dich dich = (Dich)theEObject;
        T4 result = caseDich(dich);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.NRIF:
      {
        Nrif nrif = (Nrif)theEObject;
        T4 result = caseNrif(nrif);
        if (result == null) result = caseTerm(nrif);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.TERM:
      {
        Term term = (Term)theEObject;
        T4 result = caseTerm(term);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.LET:
      {
        Let let = (Let)theEObject;
        T4 result = caseLet(let);
        if (result == null) result = caseTerm(let);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.VAR:
      {
        Var var = (Var)theEObject;
        T4 result = caseVar(var);
        if (result == null) result = caseTerm(var);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.ABS:
      {
        Abs abs = (Abs)theEObject;
        T4 result = caseAbs(abs);
        if (result == null) result = caseTerm(abs);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.APP:
      {
        App app = (App)theEObject;
        T4 result = caseApp(app);
        if (result == null) result = caseTerm(app);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.UQ:
      {
        Uq uq = (Uq)theEObject;
        T4 result = caseUq(uq);
        if (result == null) result = caseTerm(uq);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.TAPP:
      {
        Tapp tapp = (Tapp)theEObject;
        T4 result = caseTapp(tapp);
        if (result == null) result = caseTerm(tapp);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.T:
      {
        T t = (T)theEObject;
        T4 result = caseT(t);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.T1:
      {
        T1 t1 = (T1)theEObject;
        T4 result = caseT1(t1);
        if (result == null) result = caseT(t1);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.T2:
      {
        T2 t2 = (T2)theEObject;
        T4 result = caseT2(t2);
        if (result == null) result = caseT(t2);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.T3:
      {
        T3 t3 = (T3)theEObject;
        T4 result = caseT3(t3);
        if (result == null) result = caseT(t3);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.TYPE_DICH:
      {
        TypeDich typeDich = (TypeDich)theEObject;
        T4 result = caseTypeDich(typeDich);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MyDslPackage.TRIF:
      {
        Trif trif = (Trif)theEObject;
        T4 result = caseTrif(trif);
        if (result == null) result = caseT(trif);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      default: return defaultCase(theEObject);
    }
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>File SF</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>File SF</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseFileSF(FileSF object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Prog</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>Prog</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseProg(Prog object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Prog1</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>Prog1</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseProg1(Prog1 object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Import</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>Import</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseImport(Import object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Dich</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>Dich</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseDich(Dich object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Nrif</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>Nrif</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseNrif(Nrif object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Term</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>Term</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseTerm(Term object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Let</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>Let</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseLet(Let object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Var</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>Var</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseVar(Var object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Abs</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>Abs</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseAbs(Abs object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>App</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>App</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseApp(App object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Uq</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>Uq</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseUq(Uq object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Tapp</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>Tapp</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseTapp(Tapp object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>T</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>T</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseT(T object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>T1</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>T1</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseT1(T1 object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>T2</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>T2</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseT2(T2 object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>T3</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>T3</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseT3(T3 object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Type Dich</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>Type Dich</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseTypeDich(TypeDich object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Trif</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>Trif</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T4 caseTrif(Trif object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
   * <!-- begin-user-doc -->
   * This implementation returns null;
   * returning a non-null result will terminate the switch, but this is the last case anyway.
   * <!-- end-user-doc -->
   * @param object the target of the switch.
   * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject)
   * @generated
   */
  @Override
  public T4 defaultCase(EObject object)
  {
    return null;
  }

} //MyDslSwitch
